"document.a,b3"为空或不是对象

来源:百度知道 编辑:UC知道 时间:2024/05/31 11:12:47
<html>
<head>
<title>ex0501</title>
<script type="text/javascript">
<!--
function jisuan(){
var yue=parseInt(document.a.b1.value)-1;
var ri=parseInt(document.a.b2.value);
var now = new Date();
var shengri=new Date(now.getFullYear(),yue,ri,23,59,59,999);
var nowtime=now.getTime();
document.write(nowtime);
var shengritime=shengri.getTime();
var count=shengritime - nowtime;
if(count<0)
{count=count+365*24*60*60*1000;}
var tian=Math.ceil(count/(24*60*60*1000));
var xiaoshi=Math.ceil(count/(60*60*1000))-tian*24;
var fenzhong=Math.ceil(count/(60*1000))-tian*24*60-xiaoshi*60;
var miao=Math.ceil(count/1000)-tian*24*60*60-xiaoshi*60*60-fenzhong*60;
document.a.b3.value=tian+"天";
setTimeout("jisuan()",1000);
}
//-->
</script>
</head>
<body>
<form name="a">

document.write();
不要用这个方法,当你用这个方法setTimeout("jisuan()",1000);循环时,第一次打印了,第二次的时候,它会把document 对象清空,所以document.a.b3就为空了,或不是对象了

不要用document.write(nowtime);
可以用这种方式document.a.b4.value=nowtime;这样就没有问题了
或者用window.alert(nowtime);也可以

以下是比较专业的说法

在调用 write( ) 方法时,如果该文档不处于在调用 write( ) 方法时的打开和分析的过程中,该方法将打开并清除该文档,所以它可能是有危险的。该示例显示了一个每隔一分钟就显示时间的脚本,但是在第一次显示后由于它从过程中将自己清除,因此会导致失败。

感觉document.all.b3是得不到这文本框的值,
document.all应该是一个数组,建议可以用以下两个方法得到

1.<input type="text" name="b3" id="id_1">
这样可以用document.getElementById("id_1").value得到这个文本框的值
2.如果一定不想加上id这个属性可以:
document.getElementsByName("b3")[0].value也是可以得到的,与ById区别在于这是返回数组的.

document.write(),这个方法应该会倒置每一秒加都会增加一行时间信息,当然也有可能只运行第一次后就会直接报错不动了,具体原因说不上来.建议换成innerHTML的方法来做,具体就不罗嗦了

不应该是 document.all.b3 吗?